

#include <iostream>

class A
{
public:
    void out()
    {
        std::cout << "A here " << std::endl;
    }
};
class B
{
public:
    void showB()
    {
        std::cout << "BBBBB here " << std::endl;
    }
};

// 直接调用。
void callOut( A*a, void (A::*callback)() )
{
    (a->*callback)();
}

// 模板套用
template <class R>

void temCallOut(R *r,void (R::*callback)())
{
    (r->*callback)();
}


int main(int argc, char **argv)
{
    {
        // 类函数指针演示。
        A* a = new A;
        callOut( a, &A::out );
    }


    {
        //模板函数指针演示
        A* a = new A;
        temCallOut( a, &A::out );
        B b;
        temCallOut( &b, &B::showB);
    }


    return 0 ;
}


